\section{Diseño integral}

\subsection{Introducción y aclaraciones previas}
En esta sección se presentan los diagramas realizados para representar el diseño
integral de la aplicación. Para su mayor comprensión se divide esta presentación en bloques de acuerdo a las colaboraciones existentes entre los objetos.

Cabe aclarar que en el diseño presentado no se incluye la interfaz de usuario así como tampoco la interfaz del gestor de mapas. Se limita el diseño a las colaboraciones internas del sistema.

Tampoco se agregaron las clases a las que pertenece cada objeto en las cajas de los diagramas dado que sobrecargaba mucho los diagramas y la herramienta no permitía dar imágenes muy nítidas, pero estas quedan fácilmente deducibles del nombre del objeto.

\subsection{Planes de entrenamiento}
Este bloque corresponde a la representación de la generación de planes de entrenamiento

\begin{figure}[H]
  %\centering
    \includegraphics[scale=0.4]{generadorPlanes.jpg}
  \caption{Planes de entrenamiento}
  \label{genPlanes}
\end{figure}

\begin{itemize}
 \item Generador de Planes: Es el objeto encargado de generar planes en base a los parámetros recibidos y alguna lógica. Dados un perfil, un objetivo y la experiencia del corredor, genera un plan de acuerdo a algún criterio.
 \item Perfil: Representa el perfil de un corredor, en otras palabras sus características, su altura, peso, sexo, experiencia y objetivos.
 \item Plan: Es el objeto que representa el plan que se presenta al usuario, es el resultado del Generador de Planes. El mismo se compone de una serie de entrenamientos.
 \item Entrenamiento: Representa un entrenamiento que el corredor puede realizar.
 \item Fase: Representa una etapa definida de un entrenamiento. En la misma se detallan los requisitos de distancia a recorrer y el tiempo con que se cuenta para hacerlo.
 \item Objetivo: Representa el objetivo que un corredor tiene en la realidad.
 \item Experiencia: Representa la experiencia que un corredor tiene en la realidad.
\end{itemize}
 
 \subsection{Modos de consumo de batería}
 En este bloque se presentan los distintos modos de consumo de batería de los cuales puede elegir el usuario al inicio de la aplicación y que definen cómo y cada cuanto tiempo será notificado de su velocidad.

\begin{figure}[H]
  %\centering
    \includegraphics[scale=0.4]{modosDeConsumo.jpg}
  \caption{modos de consumo}
  \label{modosConsumo}
\end{figure}

 \begin{itemize}
  \item Modo de Consumo: Representa la interfaz para el modo en que se comporta la aplicación en términos de notificaciones al usuario. Define cada cuanto tiempo será sensada la velocidad del corredor y de qué manera se notificará al mismo.
  \item Notificación: Representa la interfaz para la manera en que se notifica al corredor.
 \end{itemize}

 \subsection{Actualización de posiciones y registro de estadísticas}
 Este bloque muestra la representación de las clases de los objetos que colaboran para realizar las actualizaciones de la posición del corredor así como también el registro de las estadísticas de performance.
\begin{landscape}
\begin{figure}[H]
  \centering
    \includegraphics[scale=0.4]{Posicion.jpg}
  \caption{Actualización de posiciones y registro de estadísticas}
  \label{ActPos}
\end{figure}
\end{landscape}

 \begin{itemize}
  \item Actualizador de posición: Representa al objeto encargado de distribuir las colaboraciones necesarias para mostrar la nueva posición en el mapa y avisar al controlador de velocidad que debe realizar los cálculos necesarios para notificar al corredor si debe aumentar o disminuir su velocidad para cumplir con una fase.
  \item Gps: Representa al objeto que conoce la posición del corredor, en este caso del dispositivo celular sobre el cual está corriendo la aplicación.
  \item Alarma: Representa al objeto encargado de avisar cuando pasó un lapso de tiempo.
  \item Gestor de Mapas: Representa al objeto encargado de mostrar una posición en el mapa.
  \item Observador de posición: Representa la interfaz para los objetos interesados en eventos de cambio de posición.
  \item Controlador de velocidad: Representa al objeto encargado de calcular y verificar la velocidad actual del corredor para notificar a los objetos que esperan dicha información.
  \item Estadísticas de entrenamiento: En este bloque, este objeto colabora para registrar las velocidades del corredor.
 \end{itemize}
 
 \subsection{Seguimiento de entrenamientos}
 En este bloque se presentan las clases de los objetos que colaboran para realizar el seguimiento de un entrenamiento a partir de que el corredor decide iniciarlo.
 
 \begin{figure}[H]
  %\centering
    \includegraphics[scale=0.4]{SeguidorEntrenamiento.jpg}
  \caption{Seguimiento de entrenamientos}
  \label{SegEnt}
\end{figure}


\begin{itemize}
  \item SeguidorDeEntrenamiento: Representa al objeto encargado de seguir el entrenamiento iniciado por el corredor. El mismo, además de conocer el entrenamiento a seguir, conoce el modo de consumo seleccionado y usa las fases del entrenamiento para conocer su duración y así disparar las colaboraciones necesarias para que los otros objetos interactuen entre sí y puedan realizar sus funcionalidades.
  \item Alarma: En este diagrama este objeto colabora con el seguidor de entrenamiento para indicarle cuándo debe notificar a sus observadores que hubo un cambio ya sea de fase o de posición del corredor.
  \item EstadisticasDeEntrenamiento: Representa al objeto encargado de registrar ciertos datos del entrenamiento por fases y cuando este está completo, genera un registro para el mismo.
  \item RegistroDeEntrenamientos: Es el objeto que representa los registros estadísticos de los entrenamientos ya finalizados o en curso.
  \item ObservadorDeFases: Representa la interfaz para los observadores interesados en eventos de cambio de fase.
 \end{itemize}

 
 